﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Content;
using Editeur_map;

namespace lapinou_game2.GameInteraction
{
    /// <summary>
    /// Classe pour gérer les collisions par bounding box
    /// Elle devra comporter des fonctions renvoyant :
    /// -Soit des booléen pour indiquer si il y a collision ou non
    /// -Soit une bounding box particulière (pour plus de précision)
    /// -Ou encore un côté précis de la bounding box en question (pour encore plus de précision)
    /// </summary>
    class Collisions
    {
        // Variables
        private List<BoundingBox> bbList;
        private BoundingBox currentBb;

        // Accesseurs
        public BoundingBox CurrentBb { get { return currentBb; } }
        public List<BoundingBox> BbList { get { return bbList; } }
        


        public Collisions()
        {
            bbList = new List<BoundingBox>();
            currentBb = new BoundingBox();
        }

        public void CreateBoundingList(Map_State mapToHitTest, int xdecalage, int ydecalage)
        {
            foreach (Node node in mapToHitTest.list_node)
            {
                Vector3[] tempPoints = new Vector3[2];
                tempPoints[0] = new Vector3(node.pos.X + node.x_decalage + xdecalage, node.pos.Y + node.y_decalage + ydecalage, 0);
                tempPoints[1] = new Vector3(node.pos.X + node.x_decalage + 35 + xdecalage, node.pos.Y + node.y_decalage + 35 + ydecalage, 0);
                BoundingBox tempBox = BoundingBox.CreateFromPoints(tempPoints);
                bbList.Add(tempBox);
            }
        }
        
        public string getHitTestValue(BoundingSphere UnitToTest)
        {
            foreach (BoundingBox bb in bbList)
            {
                if (bb.Contains(UnitToTest) != ContainmentType.Disjoint)
                {
                    currentBb = bb;
                    return "yes";
                }
            }
            return "no";
        }

        // Coder une fonction donnant plus de précision sur la bounding percuttée
        // FIX ME
        // 

        public void ResetBbList()
        {
            bbList.Clear();
        }

    }
}
